{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import netCDF4 as nc\n",
    "import geopandas as gpd\n",
    "from netCDF4 import num2date\n",
    "import datetime\n",
    "\n",
    "from tqdm import tqdm\n",
    "\n",
    "tqdm.pandas()\n",
    "from shapely.geometry import Point\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import platform\n",
    "\n",
    "from cartopy import crs as ccrs\n",
    "\n",
    "if platform.system() == 'Darwin':\n",
    "    plt.rcParams[\"font.family\"] = 'Arial Unicode MS'\n",
    "elif platform.system() == 'Windows':\n",
    "    plt.rcParams[\"font.family\"] = 'SimHei'\n",
    "else:\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [],
   "source": [
    "\n",
    "nc_data = nc.Dataset(\"cru_ts4.05.1901.2020.tmp.dat.nc\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 提取变量\n"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-6-c2593932da71>:1: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.\n",
      "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
      "  raw_lat_data = np.array(nc_data.variables['lat'])\n",
      "<ipython-input-6-c2593932da71>:2: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.\n",
      "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
      "  raw_lon_data = np.array(nc_data.variables['lon'])\n",
      "<ipython-input-6-c2593932da71>:3: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.\n",
      "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
      "  raw_time_data = np.array(nc_data.variables['time'])\n",
      "<ipython-input-6-c2593932da71>:4: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.\n",
      "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n",
      "  raw_tmp_data = np.array(nc_data.variables['tmp'])\n"
     ]
    }
   ],
   "source": [
    "raw_lat_data = np.array(nc_data.variables['lat'])\n",
    "raw_lon_data = np.array(nc_data.variables['lon'])\n",
    "raw_time_data = np.array(nc_data.variables['time'])\n",
    "raw_tmp_data = np.array(nc_data.variables['tmp'])\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [],
   "source": [
    "tmp_missing_value = nc_data.variables['tmp'].missing_value"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 导入中国边界数据"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "china_boundary = gpd.read_file(filename=\"数据集/中国地图边界202111版.json\")\n",
    "\n",
    "china_boundary_valid = china_boundary.copy()\n",
    "china_boundary_valid['geometry'] = china_boundary.buffer(0)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [],
   "source": [
    "def pic(lon, lat) -> bool:\n",
    "    \"\"\"\n",
    "    检测一个点是否在中国边界线内\n",
    "    lon:东经\n",
    "    lat:北纬\n",
    "    :param lon:\n",
    "    :param lat:\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    return china_boundary_valid.contains(Point(lon, lat))[0]"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 开始\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "array([-89.75, -89.25, -88.75, -88.25, -87.75, -87.25, -86.75, -86.25,\n       -85.75, -85.25, -84.75, -84.25, -83.75, -83.25, -82.75, -82.25,\n       -81.75, -81.25, -80.75, -80.25, -79.75, -79.25, -78.75, -78.25,\n       -77.75, -77.25, -76.75, -76.25, -75.75, -75.25, -74.75, -74.25,\n       -73.75, -73.25, -72.75, -72.25, -71.75, -71.25, -70.75, -70.25,\n       -69.75, -69.25, -68.75, -68.25, -67.75, -67.25, -66.75, -66.25,\n       -65.75, -65.25, -64.75, -64.25, -63.75, -63.25, -62.75, -62.25,\n       -61.75, -61.25, -60.75, -60.25, -59.75, -59.25, -58.75, -58.25,\n       -57.75, -57.25, -56.75, -56.25, -55.75, -55.25, -54.75, -54.25,\n       -53.75, -53.25, -52.75, -52.25, -51.75, -51.25, -50.75, -50.25,\n       -49.75, -49.25, -48.75, -48.25, -47.75, -47.25, -46.75, -46.25,\n       -45.75, -45.25, -44.75, -44.25, -43.75, -43.25, -42.75, -42.25,\n       -41.75, -41.25, -40.75, -40.25, -39.75, -39.25, -38.75, -38.25,\n       -37.75, -37.25, -36.75, -36.25, -35.75, -35.25, -34.75, -34.25,\n       -33.75, -33.25, -32.75, -32.25, -31.75, -31.25, -30.75, -30.25,\n       -29.75, -29.25, -28.75, -28.25, -27.75, -27.25, -26.75, -26.25,\n       -25.75, -25.25, -24.75, -24.25, -23.75, -23.25, -22.75, -22.25,\n       -21.75, -21.25, -20.75, -20.25, -19.75, -19.25, -18.75, -18.25,\n       -17.75, -17.25, -16.75, -16.25, -15.75, -15.25, -14.75, -14.25,\n       -13.75, -13.25, -12.75, -12.25, -11.75, -11.25, -10.75, -10.25,\n        -9.75,  -9.25,  -8.75,  -8.25,  -7.75,  -7.25,  -6.75,  -6.25,\n        -5.75,  -5.25,  -4.75,  -4.25,  -3.75,  -3.25,  -2.75,  -2.25,\n        -1.75,  -1.25,  -0.75,  -0.25,   0.25,   0.75,   1.25,   1.75,\n         2.25,   2.75,   3.25,   3.75,   4.25,   4.75,   5.25,   5.75,\n         6.25,   6.75,   7.25,   7.75,   8.25,   8.75,   9.25,   9.75,\n        10.25,  10.75,  11.25,  11.75,  12.25,  12.75,  13.25,  13.75,\n        14.25,  14.75,  15.25,  15.75,  16.25,  16.75,  17.25,  17.75,\n        18.25,  18.75,  19.25,  19.75,  20.25,  20.75,  21.25,  21.75,\n        22.25,  22.75,  23.25,  23.75,  24.25,  24.75,  25.25,  25.75,\n        26.25,  26.75,  27.25,  27.75,  28.25,  28.75,  29.25,  29.75,\n        30.25,  30.75,  31.25,  31.75,  32.25,  32.75,  33.25,  33.75,\n        34.25,  34.75,  35.25,  35.75,  36.25,  36.75,  37.25,  37.75,\n        38.25,  38.75,  39.25,  39.75,  40.25,  40.75,  41.25,  41.75,\n        42.25,  42.75,  43.25,  43.75,  44.25,  44.75,  45.25,  45.75,\n        46.25,  46.75,  47.25,  47.75,  48.25,  48.75,  49.25,  49.75,\n        50.25,  50.75,  51.25,  51.75,  52.25,  52.75,  53.25,  53.75,\n        54.25,  54.75,  55.25,  55.75,  56.25,  56.75,  57.25,  57.75,\n        58.25,  58.75,  59.25,  59.75,  60.25,  60.75,  61.25,  61.75,\n        62.25,  62.75,  63.25,  63.75,  64.25,  64.75,  65.25,  65.75,\n        66.25,  66.75,  67.25,  67.75,  68.25,  68.75,  69.25,  69.75,\n        70.25,  70.75,  71.25,  71.75,  72.25,  72.75,  73.25,  73.75,\n        74.25,  74.75,  75.25,  75.75,  76.25,  76.75,  77.25,  77.75,\n        78.25,  78.75,  79.25,  79.75,  80.25,  80.75,  81.25,  81.75,\n        82.25,  82.75,  83.25,  83.75,  84.25,  84.75,  85.25,  85.75,\n        86.25,  86.75,  87.25,  87.75,  88.25,  88.75,  89.25,  89.75],\n      dtype=float32)"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "raw_lon_data,\n",
    "raw_lat_data"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "outputs": [],
   "source": [
    "single_data = raw_tmp_data[1,:,:].copy()\n",
    "single_data[single_data == tmp_missing_value] = np.nan"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.image.AxesImage at 0x7fbf0b3e79d0>"
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.imshow(single_data[::-1, :])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 裁切\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "outputs": [],
   "source": [
    "mask_matrix = np.full(shape=(360, 720), fill_value=False)\n",
    "# mask_matrix[0,0] = True"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[20., nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan],\n       ...,\n       [nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)"
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# single_data[mask_matrix] = 20\n",
    "# single_data"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 360/360 [00:58<00:00,  6.20it/s]\n"
     ]
    }
   ],
   "source": [
    "mask_matrix = np.full(shape=(360, 720), fill_value=False)\n",
    "for temp_lat in tqdm(range(360)):\n",
    "    for temp_lon in range(720):\n",
    "        point_lat_lon = (raw_lon_data[temp_lon], raw_lat_data[temp_lat])\n",
    "        mask_matrix[temp_lat, temp_lon] = pic(lon=point_lat_lon[0], lat=point_lat_lon[1])\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ok~\n"
     ]
    }
   ],
   "source": [
    "print('ok~')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "outputs": [],
   "source": [
    "single_data[~mask_matrix] = np.nan"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.image.AxesImage at 0x7fbf0c49f6d0>"
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.imshow(single_data[::-1, :])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan],\n       ...,\n       [nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan],\n       [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)"
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/devc/lib/python3.8/site-packages/rasterio/__init__.py:230: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix be returned.\n",
      "  s = writer(path, mode, driver=driver,\n"
     ]
    }
   ],
   "source": [
    "import rasterio\n",
    "def array2gtiff(array, filename):\n",
    "    \"\"\"\n",
    "    将一个矩阵保存为tiff文件,\n",
    "    这里还可以设置tiff的crs和transofrm。更多，可以查看rasterio的官网或者下面的这个链接\n",
    "    https://gis.stackexchange.com/questions/279953/numpy-array-to-gtiff-using-rasterio-without-source-raster\n",
    "    :param array: shape:(row, col)\n",
    "    :param filename:\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    with rasterio.open(filename, 'w', driver='GTiff',\n",
    "                       height=array.shape[0], width=array.shape[1],\n",
    "                       count=1, dtype=str(array.dtype)) as f:\n",
    "        f.write(array, 1)\n",
    "\n",
    "# test function\n",
    "array2gtiff(array=single_data[::-1,:], filename=\"结果/testchina.tiff\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[False, False, False, ..., False, False, False],\n       [False, False, False, ..., False, False, False],\n       [False, False, False, ..., False, False, False],\n       ...,\n       [False, False, False, ..., False, False, False],\n       [False, False, False, ..., False, False, False],\n       [False, False, False, ..., False, False, False]])"
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}